package cl.gob.minvu.catastro.managedBean;

import java.io.Serializable;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

import org.jboss.logging.Logger;

import cl.gob.minvu.catastro.ejb.UsuarioEJBRemote;
import cl.gob.minvu.catastro.model.Perfil;
import cl.gob.minvu.catastro.model.Persona;
import cl.gob.minvu.catastro.model.Usuario;
import cl.gob.minvu.catastro.util.GenericUtil;
import cl.gob.minvu.catastro.util.ManagedBeanUtil;
import cl.gob.minvu.catastro.util.PasswordManager;

/**
 * @author psep
 *
 */
@ManagedBean(name = "usuarioBean")
@SessionScoped
public class UsuarioBean implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	@SuppressWarnings("unused")
	private static final Logger logger = Logger.getLogger(UsuarioBean.class);

	@EJB
	private UsuarioEJBRemote usuarioEJB;

	private Usuario usuario;
	private List<Usuario> usuarios;
	private Usuario usuarioSeleccionado;
	private Boolean update;

	@PostConstruct
	public void init() {
		this.clearFrm();
		this.loadUsuarios();
	}

	public void createUser() {
		this.usuario.setPassword(PasswordManager.encrypt(this.usuario
				.getPassword()));
		
		if (this.usuarioSeleccionado != null) {
			if (!this.usuarioEJB.update(this.usuario)) {
				ManagedBeanUtil.getMessageERROR("Se ha producido un error al actualizar, intente más tarde");
			} else {
				ManagedBeanUtil.getMessageINFO("Usuario actualizado con éxito");
				this.init();
			}
		} else if (!GenericUtil.validateRun(this.usuario.getPersona().getRut(),
				this.usuario.getPersona().getDigitoverificador())) {
			ManagedBeanUtil.getMessageERROR("El RUN ingresado no es válido");
		} else if (this.usuarioEJB.countByUser(this.usuario) > 0) {
			ManagedBeanUtil.getMessageERROR("Ya existe un usuario con ese RUN y/o nombre de usuario");
		} else {	
			Perfil perfil = new Perfil();
			perfil.setIdperfil(2);

			this.usuario.setPerfil(perfil);
			
			if (!this.usuarioEJB.save(this.usuario)) {
				ManagedBeanUtil.getMessageERROR("Se ha producido un error al crear el usuario, intente más tarde");
			} else {
				ManagedBeanUtil.getMessageINFO("Usuario creado con éxito");
				this.init();
			}
		}
	}
	
	/**
	 * 
	 */
	public void clearFrm() {
		this.usuario = new Usuario();
		this.usuario.setPersona(new Persona());
		this.usuarioSeleccionado = null;
		this.update = false;
	}

	public void loadForUpdate() {
		this.update = true;
		this.usuario = this.usuarioSeleccionado;
	}

	public void deleteUser() {
		if (!this.usuarioEJB.delete(this.usuarioSeleccionado)) {
			ManagedBeanUtil.getMessageERROR("Se ha producido un error al eliminar el usuario, intente más tarde");
		} else {
			ManagedBeanUtil.getMessageINFO("Usuario eliminado con éxito");
		}
		
		this.init();
	}

	private void loadUsuarios() {
		this.usuarios = this.usuarioEJB.list(null);
	}

	public Usuario getUsuarioSeleccionado() {
		return usuarioSeleccionado;
	}

	public void setUsuarioSeleccionado(Usuario usuarioSeleccionado) {
		this.usuarioSeleccionado = usuarioSeleccionado;
	}

	public Usuario getUsuario() {
		return usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	public List<Usuario> getUsuarios() {
		return usuarios;
	}

	public void setUsuarios(List<Usuario> usuarios) {
		this.usuarios = usuarios;
	}

	public Boolean getUpdate() {
		return update;
	}

	public void setUpdate(Boolean update) {
		this.update = update;
	}

}
